package com.coolrui.domain.statemachine.enums;

import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

// 订单状态
@Getter
public enum OrderState {
    INIT(0, "待支付"),
    WAIT_ASSIGN(20, "待派单"),
    WAIT_SERVICE(40, "待上门服务"),
    SERVING(60, "服务中"),
    FINISHED(80, "已完成"),
    CANCELED(100, "已取消");

    // 使用 final 修饰，保证枚举实例属性不可变
    private final Integer code;
    private final String desc;

    // 使用静态 Map 缓存，提高查找效率
    private static final Map<Integer, OrderState> CODE_MAP = new HashMap<>();

    static {
        // 初始化缓存
        for (OrderState state : values()) {
            CODE_MAP.put(state.code, state);
        }
    }

    OrderState(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    /**
     * 根据订单状态码获取对应的订单状态枚举实例
     *
     * @param code 订单状态码
     * @return 对应的订单状态枚举实例，若未找到则返回 null
     */
    public static OrderState getInstance(Integer code) {
        // 使用 equals 方法比较 Integer 对象，避免使用 == 可能带来的问题
        return CODE_MAP.get(code);
    }
}